﻿#ifndef QGroupLabel_H
#define QGroupLabel_H

#include <QPixmap>
#include <QPixmapCache>
#include <QLabel>
#include <QPainter>
#include <QPropertyAnimation> 
#include <QSequentialAnimationGroup>
#include <QParallelAnimationGroup>
#include <QTimer>
#include <QList>
#include "QCommonWidgets_global.h"
QCOMMWIDGETS_BEGIN_NAMESPACE

// 显示文字还是图片
enum EOrientation
{
	/**
	 * @param - e_onlyIimage	: 图片
	 * @param - Icon			: 图标
	 * @param - e_onlyText		: 文字
	*/
	Image = 0,
	Icon,
	Text,

};

class QCOMMONWIDGETS_EXPORT QGroupLabel : public QLabel
{
    Q_OBJECT
	
public:
    
    /**
     * 显示文字构造函数
     *
     * @param - text:               显示的文字
     * @param - ft:                 文字字体和大小
     * @param - alig:               文字对齐方式
     * @param - text_color:         文字颜色
     * @param - parent:             父控件指针
    */
    QGroupLabel(const QString text,const QFont ft,QFlags<Qt::AlignmentFlag> alig,const QColor text_color, QWidget *parent = nullptr);
	
	/**
     * 显示文字构造函数
     *
     * @param - text:               显示的文字
     * @param - ft:                 文字字体和大小
     * @param - alig:               文字对齐方式
     * @param - text_color:         文字颜色
     * @param - m_psetWordWrapbool: 是否自动换行
     * @param - parent:             父控件指针
    */
    QGroupLabel(const QString text,const QFont ft,QFlags<Qt::AlignmentFlag> alig,const QColor text_color, bool m_psetWordWrapbool, QWidget *parent = nullptr);

    /**
     * 显示显示单张图构造函数
     *
     * @param - image:					图片地址
     * @param - alig:					对齐方式
     * @param - m_pAspectRatioMode:		图片填充方式
     * @param - m_pEOrientation:		是图片还是图标
     * @param - parent:					父控件指针
    */
    QGroupLabel(QString image,QFlags<Qt::AlignmentFlag> alig,Qt::AspectRatioMode m_pAspectRatioMode, EOrientation m_pEOrientation, QWidget *parent = nullptr);
	
	

    /**
     * 析构函数
     *
     * @param -
     * @note -
     * @return -
     */
    virtual ~QGroupLabel();

	// 设置显示图片
    bool SetPixmap(QString image);

	// 设置显示图片
    bool SetPixmap(QPixmap &image);

    // 清除显示图片
    void clearImg();

	// 设置显示文字
    void SetQStringText(QString text);

	// 设置文字颜色
    void SetTextColor(const QColor text_color);

	// 设置选中
	void SetChecked();

	// 移除选中
	void RemoveChecked();

	// 设置图片缩放模式
	void setTransformationMode(Qt::TransformationMode mode) { m_TransformationMode = mode; }

	// 窗口尺寸变化自动调用函数
    void resizeEvent(QResizeEvent *event) override;

private:

    EOrientation                            m_pEOrientation;                        // 显示文字还是图片
    QString                                	strImage;                  				// 单张图片
	QFont									font;									// 字体和大小
	QFlags<Qt::AlignmentFlag> 				m_pAlignmentFlag;						// 对齐方式
	Qt::AspectRatioMode 					m_pAspectRatioMode;						// 图片填充方式
	Qt::TransformationMode 					m_TransformationMode = Qt::SmoothTransformation;// 图片缩放模式
};
QCOMMWIDGETS_END_NAMESPACE

#endif // QLABELBASE_H
